package com.acmen.easyapi.generator;

import com.acmen.easyapi.annotation.Param;
import com.acmen.easyapi.util.StringUtil;
import org.springframework.stereotype.Component;

import java.lang.reflect.Field;
import java.util.ArrayList;
import java.util.Collection;
import java.util.List;
import java.util.Random;

/**
 * @author acmen
 * 手机号数据获取器
 */
@Component
public class MobileDataGenerator implements DataGenerator {
    /**
     * 判断是否匹配
     *
     * @param field    字段
     * @param param    参数
     * @return         true：匹配；false：不匹配
     */
    @Override
    public boolean matches(Field field, Param param) {
        if (param.label().endsWith("手机号") || param.label().endsWith("手机")) {
            // 如果参数的标签以"手机号"或"手机"结尾
            return true;
        }
        if (field.getName().equals("mobile") || field.getName().equals("tel")) {
            // 如果字段的名称是"mobile"或"tel"
            return true;
        }
        if (field.getName().equals("mobiles") || field.getName().equals("tels")) {
            // 如果字段的名称是"mobiles"或"tels"
            return true;
        }
        return false;

    }

    /**
     * 获取数据获取说明
     *
     * @return 数据获取说明
     */
    @Override
    public String getNote() {
        String note = "手机号：";
        note += "①当@ReqParam.name以'手机号'或者'手机'结尾时随机生成一个手机号；<br>";
        note += TAB + "②当字段名为'mobile'或者'tel'时随机生成一个手机号；<br>";
        note += TAB + "③当字段名为'mobiles'或者'tels'时随机生成一个手机号列表。";
        return note;
    }


    /**
     * 生成数据
     *
     * @param field    字段
     * @param param    参数
     * @return         生成的数据
     */
    @Override
    public Object generate(Field field, Param param) {
        Random random = new Random();

        // 判断字段类型是否为数组或可集合类型
        if (field.getType().isArray() || Collection.class.isAssignableFrom(field.getType())) {
            List datas = new ArrayList();
            // 循环生成2个随机数
            for (int i = 0; i < 2; i++) {
                int num = random.nextInt(100000000);
                datas.add("168" + StringUtil.leftPad(String.valueOf(num), 8, "0"));
            }
            return datas;
        } else {
            // 生成一个随机数
            int num = random.nextInt(100000000);
            return "168" + StringUtil.leftPad(String.valueOf(num), 8, "0");
        }

    }
}
